package com.ruoyi.charge.rabbitmq;

import com.rabbitmq.client.Channel;
import com.ruoyi.charge.domain.ChargingBill;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * 订单的消费者
 */
@Component
public class BillConsumer {
    //concurrency="1" 方法运行在单线程中
    @RabbitListener(queues = DelayExchangeConfig.DELAY_QUEUE, concurrency = "1")
    public void handleBill(ChargingBill chargingBill,
                           Channel channel,
                           Message message) throws Throwable {
        System.out.println("线程号=" + Thread.currentThread().getId());
        System.out.println(chargingBill.toString());
        try {
            //更新数据库，数据库并发是1
            //更新成功，发确认消息，消息队列收到确认信息会删除数据
            //得数据编号
            long tag = message.getMessageProperties().getDeliveryTag();
            System.out.println("tag=" + tag);
            //发确认信息,true表示，如果tag的值是5，
            //消息队列服务器认为5前面的消息也处理成功，就会把tag为1，2，3，4的数据也删除了
            channel.basicAck(tag, true);
        } catch (Exception e) {
            //不发确认消息，消息队列没有收到确认信息，信息还在队列中
        }
    }
}
